package com.thinkgem.jeesite.modules.act.service;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.task.Task;

import com.thinkgem.jeesite.common.persistence.Page;
import com.thinkgem.jeesite.modules.act.entity.Act;

/**
 * TODO:工作流任务接口 
 *
 * @author 作者：lgx
 * @date 创建时间：2016年3月23日
 * @version V1.0
 */
public abstract interface ActTaskServiceInterface {

	/**
	 * 获取待办列表
	 * 
	 * @param act
	 *            工作流Entity
	 * @return
	 */
	public List<Act> todoList(Act act);

	/**
	 * 获取已办任务
	 * 
	 * @param page
	 * @param act
	 *            工作流Entity
	 * @return
	 */
	public Page<Act> historicList(Page<Act> page, Act act);

	/**
	 * 获取流转历史列表
	 * 
	 * @param procInsId
	 *            流程实例
	 * @param startAct
	 *            开始活动节点名称
	 * @param endAct
	 *            结束活动节点名称
	 */
	public List<Act> histoicFlowList(String procInsId, String startAct,
			String endAct);

	/**
	 * 获取流程列表
	 * 
	 * @param category
	 *            流程分类
	 */
	public Page<Object[]> processList(Page<Object[]> page, String category);

	/**
	 * 获取流程表单（首先获取任务节点表单KEY，如果没有则取流程开始节点表单KEY）
	 * 
	 * @return
	 */
	public String getFormKey(String procDefId, String taskDefKey);

	/**
	 * 获取任务
	 * 
	 * @param taskId
	 *            任务ID
	 */
	public Task getTask(String taskId);

	/**
	 * 删除任务
	 * 
	 * @param taskId
	 *            任务ID
	 * @param deleteReason
	 *            删除原因
	 */
	public void deleteTask(String taskId, String deleteReason);

	/**
	 * 签收任务
	 * 
	 * @param taskId
	 *            任务ID
	 * @param userId
	 *            签收用户ID（用户登录名）
	 */
	public void claim(String taskId, String userId);

	/**
	 * 提交任务, 并保存意见
	 * 
	 * @param taskId
	 *            任务ID
	 * @param procInsId
	 *            流程实例ID，如果为空，则不保存任务提交意见
	 * @param comment
	 *            任务提交意见的内容
	 * @param vars
	 *            任务变量
	 */
	public void complete(String taskId, String procInsId, String comment,
			Map<String, Object> vars);

	/**
	 * 提交任务, 并保存意见
	 * 
	 * @param taskId
	 *            任务ID
	 * @param procInsId
	 *            流程实例ID，如果为空，则不保存任务提交意见
	 * @param comment
	 *            任务提交意见的内容
	 * @param title
	 *            流程标题，显示在待办任务标题
	 * @param vars
	 *            任务变量
	 */
	public void complete(String taskId, String procInsId, String comment,
			String title, Map<String, Object> vars);

	/**
	 * 完成第一个任务
	 * 
	 * @param procInsId
	 */
	public void completeFirstTask(String procInsId);

	/**
	 * 完成第一个任务
	 * 
	 * @param procInsId
	 * @param comment
	 * @param title
	 * @param vars
	 */
	public void completeFirstTask(String procInsId, String comment,
			String title, Map<String, Object> vars);

	/**
	 * 读取带跟踪的图片
	 * 
	 * @param executionId
	 *            环节ID
	 * @return 封装了各种节点信息
	 */
	public InputStream tracePhoto(String processDefinitionId, String executionId);


	
	
}
